如同前面介紹的,Flutter 定義了三種不同型別的Platform Channel 在platform_channel.dart
,讓Flutter 在與Native 通訊中,能夠依訊息的資料型別來分類傳輸,在 Flutter(包括 android 中也存在與之對應的)中存在三種型別的訊息,就是前面提過的 BasicMessageChannel
、MethodChanel
和 EventChannel
,每一種 Channel 的建購函式都至少需要兩個引數,與之繫結的訊息型別(訊息的 name)和編碼方式(MessageCodec/MethodCodec)
BasicMessageChannel:用於雙向的單次訊息傳遞,包括發送訊息、接收訊息兩個功能。傳送訊息使用 send
函式,返回值是 Future
Future<T?> send(T message) async {
return codec.decodeMessage(await binaryMessenger.send(name, codec.encodeMessage(message)));
}
BasicMessageChannel
主要功能如上,呼叫 binaryMessenger.send
,並在前後用BasicMessageChannel
對應的Codec MessageCodec
,對 message 進行編解碼,且send
函式的引數與返回值是同一種型別
setMessageHandler
則是用於向 binaryMessenger 註冊一個MessageHandler
來處理接收訊息
void setMessageHandler(Future<T> handler(T message)) {
if (handler == null) {
binaryMessenger.setMessageHandler(name, null);
} else {
binaryMessenger.setMessageHandler(name, (ByteData message) async {
return codec.encodeMessage(await handler(codec.decodeMessage(message)));
});
}
}
主要還是由MessageHandler
處理訊息,BasicMessageChannel
所做的只是在處理前後將 message 編解碼